﻿using System.Collections.Generic;
using Headsight.BPMN2WF.BPMN.Schemas;

namespace Headsight.BPMN2WF.BPMN.Model
{
    /// <summary>
    /// Factory for constructing <see cref="BPMNArgument"/> instances for the passed in <see cref="tProcess"/>.
    /// </summary>
    public abstract class BPMNArgumentFactory
    {
        /// <summary>
        /// Creates and returns <see cref="BPMNArgument"/> instances for the passed in <see cref="tProcess"/> <para>tProcess</para>
        /// describing the <para>tProcess</para>'s <i>arguments</i>.
        /// </summary>
        public abstract IList<BPMNArgument> CreateArguments(tDefinitions tDefinitions, tProcess tProcess, BPMNProcessFactoryParams bpmnMFacParams);

        /// <summary>
        /// Creates and returns <see cref="BPMNArgument"/> instances for the passed in <see cref="tFlowElement"/> <para>tFlowElement</para>
        /// describing the <para>tFlowElement</para>'s <i>in-arguments</i>.
        /// </summary>
        public abstract IList<BPMNArgument> CreateArgumentsIn(tFlowElement tFlowElement);

        /// <summary>
        /// Creates and returns <see cref="BPMNArgument"/> instances for the passed in <see cref="tFlowElement"/> <para>tFlowElement</para>
        /// describing the <para>tFlowElement</para>'s <i>out-arguments</i>.
        /// </summary>
        public abstract IList<BPMNArgument> CreateArgumentsOut(tFlowElement tFlowElement);
    }
}